const constants   = require('../../db/constants');
const mediaServerModel = require('../../model/mediaServer');
const log4js      = require('../../utils/logUtils');
const logger      = log4js.getLogger('web');
const baseCtrl    = require('./basectrl');

const TAG = "[媒体服务器]";
/**
 * 媒体服务器信息管理
 */
let MediaServer={

    /**
     * API接口，获取设备列表
     * @param {*} req
     * @param {*} res
     */
    list: async function (req, res){
        if(!baseCtrl.hasLogin(req, res)){
            return;
        }
        let page = req.query.page;
        let pagesize = req.query.pagesize;
        if(typeof(page)=='undefined') page=1;
        if(!pagesize) pagesize=10000;

        let total = await mediaServerModel.count();
        const servers = await mediaServerModel.list(page, pagesize);
        // 遍历 servers
        for(let i=0;i<servers.length;i++){
            try {
                // await zlMediaKit.queryStatus(servers[i]);
                servers[i].alive = true;
            }catch (e) {
                logger.info(TAG, '[list] ZlMediaKit通讯失败');
                servers[i].alive = false;
            }
        }
        let ret =Object.assign(constants.httpCode.OK , {data:{servers, total, page, pagesize}});
        res.send(ret);
    },

    /**
     * Query接口读取一个媒体服务器信息
     * @param {*} req
     * @param {*} res
     */
    query:function(req,res){
        if(!baseCtrl.hasLogin(req, res)){
            return;
        }
        let server_id_zlk = req.query.server_id_zlk;

        mediaServerModel.getByServerId(server_id_zlk).then((ret)=>{
            if(ret.length){
                let send =Object.assign(constants.httpCode.OK , {data:{items:ret, total:ret.length}});
                res.send(send);
            }else{
                let send =Object.assign(constants.httpCode.NO_DATA , {data:null});
                res.send(send);
            }
        });
    },
    /**
     * 更新媒体服务器信息
     */
    update:function(req,res){
        if(!baseCtrl.hasLogin(req, res)){
            return;
        }
        logger.info(TAG, "提交的mediaServer数据", req.body);
        mediaServerModel.update(req.body);
        let ret =Object.assign(constants.httpCode.OK , {data:{}});
        res.send(ret);
    },
    /**
     * 插入一个媒体服务器信息
     */
    insert:function(req,res){
        if(!baseCtrl.hasLogin(req, res)){
            return;
        }
        // 如果已经存在，返回错误
        mediaServerModel.getByServerId(req.body.server_id_zlk).then((item)=>{
            if(item && item.length>0){
                let send =Object.assign({}, constants.httpCode.DUPLICATED);
                res.send(send);
            }else{
                mediaServerModel.insert(req.body).then((ret) => {
                    logger.info(TAG, 'ret',ret)
                    let send =Object.assign({id: ret.id}, constants.httpCode.OK);
                    res.send(send);
                }).catch((err) => {
                    logger.error(TAG, "新增媒体服务器失败", err);
                    let send =Object.assign({}, constants.httpCode.UNKNOWN);
                    res.send(send);
                });
            }
        }).catch((err)=>{
            logger.error(TAG, err);
            let send =Object.assign({}, constants.httpCode.UNKNOWN);
            res.send(send);
        });
    },
    /**
     * 删除一个媒体服务器信息
     */
    del:function(req,res){
        if(!baseCtrl.hasLogin(req, res)){
            return;
        }
        mediaServerModel.del(req.body.id);

        let ret =Object.assign(constants.httpCode.OK , {data:{}});
        res.send(ret);
    },

};
module.exports=MediaServer;
